class OrdenServicio < ActiveRecord::Base
  belongs_to :compania
  belongs_to :cliente 
  belongs_to :direccion
  has_many :rutas, :dependent => :destroy
  has_many :paquetes, :dependent => :destroy
  has_many :etapas, :dependent => :destroy
  accepts_nested_attributes_for :paquetes, :allow_destroy => true
  accepts_nested_attributes_for :direccion, :allow_destroy => true
  

  validates_presence_of     :direccion_id
  validates_presence_of     :nombre_receptor
  validates_length_of       :nombre_receptor,    :maximum => 50
  validates_presence_of     :apellido_receptor
  validates_length_of       :apellido_receptor,    :maximum => 50

  # Metodo que realiza el proceso de cambio de solicitud a recolectada a traves del xml
  def self.cambiar_estatus_recoleccion_xml(id)
    @orden_servicio = OrdenServicio.find(id)
    @orden_servicio.estatus = "Recolectada"
    @orden_servicio.fecha_orden = Time.now
    @orden_servicio.save
  end


  def self.cambiar_estatus_recoleccion_pendiente(id)
    @orden_servicio = OrdenServicio.find(id)
    @orden_servicio.estatus = "Asignada para Recoleccion"
    @orden_servicio.fecha_orden = Time.now
    @orden_servicio.save
  end

  # Funcion que realiza el calculo total de la factura generada al momento de realizar una orden de servicio
  def self.calculo_total(id)
  
    @orden_servicio = OrdenServicio.find(id)
    @paquete = Paquete.all(:conditions => {:orden_servicio_id =>  @orden_servicio.id})  
    @sumaconteopaquetes = Paquete.find_by_sql("select sum(p.peso) as suma, count(*) as count from paquetes p, orden_servicios o where p.orden_servicio_id = o.id and p.orden_servicio_id ='"+id.to_s+"'")

    @sumaconteopaquetes.each do |paquetes|
      @subtotal = ((paquetes.suma.to_f * 25.7)/100) +  (20 * paquetes.count.to_i)
      @orden_servicio.iva = @subtotal *(0.12)
      @total = @subtotal + @orden_servicio.iva
      @orden_servicio.total = @total
      $totalfactura = @total
    end
    @orden_servicio.save
  end



  def self.validar_xml_remoto(xml)
    if (Cliente.validar_cliente(xml[:cliente]) and OrdenServicio.validar_orden(xml[:orden]) and Paquete.validar_paquetes(xml[:paquetes]))
      return true
    else
      return false
    end
  end

  def self.validar_orden(orden)
    if  orden[:nombre_receptor].nil? or orden[:apellido_receptor].nil? or orden[:residencia_calle].nil? or orden[:residencia_calle].nil? or orden[:apartamento_num_casa].nil?  or orden[:urbanizacion].nil? or orden[:ciudad].nil?  or orden[:pais].nil?
      return false
    else
      return true
    end
  end
end

      	